Many devices (e.g., pagers) have a need for read only memory (ROM) and read/write memory (commonly called random access memory or RAM). ROM is typically used to store fixed data and instructions for execution by a processor (CPU). RAM is used to store data and instructions that may be changed and updated repeatedly by the CPU. In most systems, ROM and RAM are used as separate, independent memory components, with each memory component having its own address, data, control and power lines. However, the increasing demand for miniaturized devices has required the adoption of efficient system design practices such as the sharing of circuitry by system components or, where possible, the integration of two components into one component.
ROM and RAM are typically implemented as separate memory components for a variety of reasons. For example, ROM and RAM cells generate voltages that represent the logic state of a cell in incompatible ways. Unlike RAM cells which are typically "double-ended" and generate two voltages representing the state of a cell, ROM cells are typically "single-ended" and only generate a single voltage representing the state of a cell (state voltage). Consequently, determining the state of a ROM cell typically requires the use of a reference voltage generator which provides a separate (reference) voltage to a sense amplifier. Such reference voltage generators are not required to determine the state of a RAM cell because the two voltages generated by the RAM cell may be applied to different inputs of a sense amplifier.
These and other differences between conventional RAM architectures and conventional ROM architectures have heretofore presented obstacles to the integration of RAM and ROM cells within a single memory device.